home *** CD-ROM | disk | FTP | other *** search
/ Workbench Designer 2 / Workbench Designer 2.iso / boot / reboot / emodules / own / startup.e < prev   
Encoding:
Text File  |  1995-10-14  |  4.7 KB  |  213 lines

  1. /* Startup-Module
  2. ** Copyright © 1995 by Sebastian Rittau
  3. **
  4. ** $VER: startup.m 1.10 (14.10.95)
  5. **
  6. **
  7. ** Required:
  8. **
  9. ** - Kickstart >= 37
  10. ** - utility.library >=37
  11. **
  12. **
  13. ** Vars:
  14. **
  15. ** - wbstart - TRUE or FALSE
  16. ** - parsed - Array for arguments passed in
  17. **
  18. **
  19. ** Procs:
  20. **
  21. ** - error:=ini(execbase,minversion,template,tags=NIL)
  22. **   Args:
  23. **   - minversion: lowest kickversion needed
  24. **   - template: template-string for ReadArgs()
  25. **   Tags:
  26. **   - STARTM_EXCLUDE: specify from where the program cannot be run (flags):
  27. **     - STARTM_CLISTART: from CLI
  28. **     - STARTM_WBSTART: from wb
  29. **   Errors:
  30. **   - ERROR_NOMEM: lack of memory
  31. **   - STARTM_FALSEKICK: kickstartversion to small
  32. **   - STARTM_WRONGARGS: error on ReadArgs()
  33. **   - STARTM_EXCLUDEERROR: the program was started from an excluded source
  34. **
  35. ** - end()
  36. */
  37.  
  38. OPT MODULE
  39.  
  40.  
  41. MODULE 'exec/execbase',
  42.        'exec/libraries',
  43.        'exec/memory'
  44. MODULE 'dos/dosextens',
  45.        'dos/rdargs'
  46. MODULE 'utility',
  47.        'utility/tagitem'
  48. MODULE 'icon',
  49.        'workbench/workbench'
  50. MODULE 'tools/vars'
  51. MODULE 'own/error'
  52.  
  53.  
  54. ->** tags
  55. EXPORT ENUM STARTM_EXCLUDE=TAG_USER,
  56.             STARTM_READICON
  57.  
  58. ->** flags
  59. EXPORT SET STARTM_CLISTART,
  60.            STARTM_WBSTART
  61.  
  62. ->** errors
  63. EXPORT ENUM STARTM_FALSEKICK=TAG_USER,
  64.             STARTM_WRONGARGS,
  65.             STARTM_EXCLUDEERROR
  66.  
  67.  
  68. EXPORT OBJECT obj_startup
  69.   wbstart
  70.   parsed:PTR TO LONG
  71.   PRIVATE
  72.   args
  73.   istemplate
  74.  
  75.   closeutil
  76.   closeicon
  77. ENDOBJECT
  78.  
  79. /**************************************************************************
  80.  **                             Constructor                              **
  81.  **************************************************************************/
  82.  
  83. EXPORT PROC ini(base:PTR TO execbase,minversion,template,tags=NIL) OF obj_startup
  84.  DEF return=ERROR_NONE,
  85.      proc:PTR TO process,
  86.      starttypes,clistart
  87.  
  88.   self.wbstart:=FALSE
  89.   self.parsed:=NIL
  90.   self.args:=NIL
  91.   self.istemplate:=FALSE
  92.   self.closeutil:=FALSE
  93.   self.closeicon:=FALSE
  94.  
  95. ->** check version
  96.   IF minversion<37 THEN minversion:=37
  97.   IF base::lib.version<minversion
  98.     WriteF('This program requires at least exec.library V\d!\n',minversion)
  99.     return:=STARTM_FALSEKICK
  100.     JUMP endini
  101.   ENDIF
  102.  
  103.   IF utilitybase=NIL
  104.     utilitybase:=OpenLibrary('utility.library',37)
  105.     self.closeutil:=TRUE
  106.   ENDIF
  107.  
  108.   IF iconbase=NIL
  109.     iconbase:=OpenLibrary('icon.library',36)
  110.     self.closeicon:=TRUE
  111.   ENDIF
  112.  
  113.   starttypes:=GetTagData(STARTM_EXCLUDE,0,tags)
  114.  
  115.   proc:=base.thistask
  116.   clistart:=proc.cli
  117.   IF ((starttypes AND STARTM_CLISTART) AND clistart) OR ((starttypes AND STARTM_WBSTART) AND (clistart=NIL))
  118.     return:=STARTM_EXCLUDEERROR
  119.     JUMP endini
  120.   ENDIF
  121.  
  122.   IF template
  123.     IF StrCmp(template,'')=FALSE
  124.       self.istemplate:=TRUE
  125.       self.parsed:=AllocVec((countchar(template,',')+1)*SIZEOF LONG,MEMF_CLEAR)
  126.       IF self.parsed=NIL
  127.         return:=ERROR_NOMEM
  128.         JUMP endini
  129.       ENDIF
  130.     ENDIF
  131.   ENDIF
  132.  
  133. ->** CLI-args
  134.   IF clistart
  135.     self.wbstart:=FALSE
  136.     self.args:=ReadArgs(template,self.parsed,NIL)
  137.     IF self.args=NIL
  138.       return:=STARTM_WRONGARGS
  139.       JUMP endini
  140.     ENDIF
  141.   ELSE
  142.     self.wbstart:=TRUE
  143.     IF GetTagData(STARTM_READICON,FALSE,tags)
  144.       IF (return:=self.diskobject(template)) THEN JUMP endini
  145.     ENDIF
  146.   ENDIF
  147.  
  148.   endini:
  149. ENDPROC return
  150.  
  151. /**************************************************************************
  152.  **                              Destructor                              **
  153.  **************************************************************************/
  154.  
  155. EXPORT PROC end() OF obj_startup
  156.   FreeArgs(self.args)
  157.   FreeVec(self.parsed)
  158.   IF self.closeicon THEN CloseLibrary(iconbase)
  159.   IF self.closeutil THEN CloseLibrary(utilitybase)
  160. ENDPROC
  161.  
  162.  
  163.  
  164. PROC diskobject(template) OF obj_startup
  165.  DEF return=ERROR_NONE,
  166.      dobj=NIL:PTR TO diskobject,
  167.      tooltypes:PTR TO LONG,
  168.      string=NIL,
  169.      x,len,pos
  170.  
  171.   IF (dobj:=GetDiskObject('PROGDIR:filofax')) ->!!!
  172.     IF (tooltypes:=dobj.tooltypes)
  173.       x:=0
  174.       len:=0
  175.       WHILE tooltypes[x]
  176.         len:=len+StrLen(tooltypes[x])+1
  177.         INC x
  178.       ENDWHILE
  179.       INC len
  180.  
  181.       IF (string:=AllocVec(len,NIL))=NIL
  182.         return:=ERROR_NOMEM
  183.         JUMP enddiskobject
  184.       ENDIF
  185.  
  186.       x:=0
  187.       pos:=0
  188.       WHILE tooltypes[x]
  189.         CopyMem(tooltypes[x],string+pos,StrLen(tooltypes[x]))
  190.         pos:=pos+StrLen(tooltypes[x])
  191.         PutChar(string+pos,",")
  192.         INC pos
  193.         INC x
  194.       ENDWHILE
  195.       DEC pos
  196.       PutChar(string+pos,$0A)
  197.       PutChar(string+pos+1,$00)
  198.  
  199.       IoErr()
  200.       self.args:=ReadArgs(template,self.parsed,[string,len,0,NIL,NIL,NIL,NIL,NIL])
  201.       IF (self.args=NIL) AND (IoErr()<>ERROR_TOO_MANY_ARGS)
  202.         return:=STARTM_WRONGARGS
  203.         JUMP enddiskobject
  204.       ENDIF
  205.  
  206.       enddiskobject:
  207.       FreeVec(string)
  208.     ENDIF
  209.     FreeDiskObject(dobj)
  210.   ENDIF
  211. ENDPROC return
  212.  
  213.